package com.eliza.databindadv.twoWay

import android.text.TextUtils
import android.util.Log
import androidx.databinding.BaseObservable
import androidx.databinding.Bindable
import com.eliza.databindadv.BR
import com.eliza.databindadv.model.User


/*-*- coding:utf-8 -*-
 * @Author  : debi
 * @Time    : 3/26/22
 * @Software: Android Studio
 */

/*
单项绑定
* Field --> 字段变化 TextView 自动更新

双向绑定
* * Field --> 字段变化 TextView 自动更新
* * Field <--- 用户编辑 editText 字段自动同步 《-- TextView


* */
/**
 * BaseObservable 与 ObservableField
 */

//ObservableField 可以理解为是对 BaseObservable 的一层封装，省去了注解！与上文差别不大！
class UserVmObservable : BaseObservable {
    lateinit var user: User

    constructor() {
        user = User("init", 0)

    }

    /*
         Field  ==>editText
    * */
    @Bindable //发生变化 便会同步
    fun getUserName(): String {
        return user.userName
    }

    //    https://www.bilibili.com/video/BV1Ry4y1t7Tj?p=13&spm_id_from=pageDriver
    /*
    editText==>Field
    * */
    fun setUserName(userName: String) {
        if (!TextUtils.isEmpty(userName) && user.userName != userName) {
            user.userName = userName
            Log.e(this::class.java.name, "setUserName-------$userName")
            notifyPropertyChanged(BR.userName)

        }

    }

}